查看原文
其他

Android Weekly #31:你最能影响「他者」的,是你正在工作的状态

Gracker Android Performance 2022-03-07

Part1技术文章

过去一周 Android 相关的技术文章精选,以及过去一周发现的经典文章

  1. Android 编译优化系列-kapt 篇:kapt 可以理解为就是在 kotlin 开发场景下进行注解处理的工具。至于作用可以完全等效于 java 的 apt。因为 java 的 apt 处理不了 kotlin 源码文件,所以才出现了 kapt,来实现混合工程或者纯 kotlin 工程的 apt 任务。
  2. mlock 锁原理剖析:一般用户空间关联的物理页面是按需通过缺页异常的方式分配和调页,当系统物理内存不足时页面回收算法会回收一些最近很少使用的页面,但是有时候我们需要锁住一些物理页面防止其被回收(如时间有严格要求的应用),Linux 中提供了 mlock 相关的系统调用供用户空间使用来锁住部分或全部的地址空间关联的物理页面。本文的分析基于 arm64 处理器架构,内核版本为 Linux-5.10.27,我们会结合重点内核源代码来解析 mlock 是如何做到锁住进程地址空间关联的物理内存的,又是如何防止相关的物理页面被交换出去的。
  3. AMS 中关于内存回收的一些操作[1]:本文主要介绍了 AMS 中关于内存回收的一些操作
  4. 关于 eBPF 的一些粗浅理解:一般我们会听到类似这样的说法:BPF/eBPF 最初是来源于网络流量过滤的需求,但它现在已被扩展到一般的内核观测中。那就先来看看,它为何是产生自网络传输领域的。
  5. 向工程腐化开炮|资源治理:Android 资源从定义和使用方式来看,可以分为 Resource 和 Asset 两个大类。前者提供受控的结构化访问方式,每个资源均有唯一 id 标识,以及多种配置限定符来支持多语言、多设备、多特性等能力;后者提供原始且相对自由的目录和文件访问。Resource 类型是绝大部分资源使用场景下的最佳选择,本文主要聚焦的即是这种类型资源,对冲突、无用、缺失类引用、硬编码文本,这几种腐化情况,开展工具研发,以及治理实践。
  6. 使用 ftrace 分析函数性能:ftrace 的功能非常强大,可以在系统的各个关键点上采集数据用以追踪系统的运行情况。既支持预设的静态插桩点(trace event),也支持每个函数的动态插桩(function tracer)。还可以利用动态插桩来测量函数的执行时间(function graph tracer)。关于 ftrace 的详细操作和原理分析可以参考 Linux ftrace 一文。本文的主要目的主要是利用 ftrace 来做新增代码的性能分析和优化
  7. Android 主流开源库源码分析(十三)- 可能是全网第一篇 Coil 源码分析文章:Coil 是我最后一个要来分析的开源库,本篇也是我 Android 主流开源库源码分析 这个系列的最后一篇文章,包含 Coil 的入门介绍和源码分析
  8. Working with WorkManager in Android[2]:关于 WorkManager 的使用,你可以在 WorkManager 上进行很多不同的操作或定制,或者使用它的 API,使你的应用实现可靠的后台工作,可以超越应用重启甚至手机重启的时间。如果你能专心致志地慢慢浏览文档,那么你真的可以很容易地理解如何使用这个美丽而有用的 API。
  9. Foreground service launch restrictions-Android12[3]:文章介绍了在 Android 12 或者更高版本上,Foreground Server 的一些变化和系统限制,对应的官方文档:https://developer.android.google.cn/guide/components/foreground-services
  10. M1 编译 AOSP 是什么体验:M1 也可以编译 AOSP 了,M1 Max 版本的 MacBookPro 可以加入购物车了
  11. Kotlin DSL 实战:像 Compose 一样写代码[4]:Kotlin 是一门对 DSL 友好的语言,它的许多语法特性有助于 DSL 的打造,提升特定场景下代码的可读性和安全性。本文将带你了解 Kotlin DSL 的一般实现步骤,以及如何通过 @DslMarker , Context Receivers 等特性提升 DSL 的易用性。
  12. Use Android Studio like a pro — Best navigation shortcuts and tips[5]:介绍一些 Android Studio 的快捷键,提升开发效率,减少鼠标的使用率
  13. 容易被忽视的几个 Kotlin 细节, value class 执行效率竟然这么高[6]:在之前的文章中,分析过 Kotlin 1.5 宣布了一个重磅特性 value class 这是一个非常实用的特性,提高代码的可读性同时,还可以提高性能,因为编译器会对它进行更深层次的优化。今天这篇文章主要介绍 value class 和 data class 的区别。
  14. 相比 Groovy 脚本, KTS 性能到底怎么样?[7]:虽然与 Groovy 相比,KTS 当前能更好地在 Android Studio 的代码编辑器中集成,但采用 KTS 的构建速度往往比采用 Groovy 慢,因此在迁移到 KTS 时应考虑构建性能,今天就来看下相比 Groovy,KTS 性能到底怎么样?为大家决定是否迁移到 KTS 提供一定的参考
  15. Kotlin 中的协程、上下文和作用域[8]:从一个 Android 开发者的眼光来看:可以把它理解为是一个线程调度 API——就是一个 Kotlin 的语言特性,或者说编程思想。Kotlin 通过它为我们封装了一套线程 Api。(虽然在线程调度是它的主要使用场景,但是事实上远不止如此)。这时,可能你就要反驳了:不对啊,我用了那么多次协程,根本就没有线程啊!不要慌,我们今天就把 Android 中 Kotlin 协程的面具给扒下来。看看它到底是个什么东西。
  16. Android 中关于枚举的优化[9]:Android 中使用 Kotlin 枚举 + when、java 枚举时,源代码编译后会产生额外的产物,进而带来一些额外开销,本文讲述了 Android 对枚举使用的优化的讲解和解决办法。
  17. 谨慎 hook,一个 hook Transform 源码导致的错误![10]:上篇文章《总听说 AGP,它到底做了什么?》和大家分析了 AGP(Android Gradle Plugin) 做了哪些事,了解到 AGP 就是为打包这个过程服务的。那么,本篇文章就和大家聊一聊其中的 Transform,解决一下为什么在 AGP 3.x.x 的版本可以通过反射获取的 transformClassesWithDexBuilderForXXX Task 在 4.0.0 的版本就不灵了?
  18. Android 源码分析 - Binder 驱动(中)[11]:上一篇文章Android 源码分析 - Binder 驱动(上)[12],我们已经了解了 binder 驱动设备是如何注册的,并且分析了 binder_open 和 binder_mmap 操作函数,接下来我们继续分析 binder 驱动中最重要的部分 binder_ioctl
  19. 使用 perfetto 分析 Android native 物理内存泄漏[13]:google 推出了新一代性能分析工具 perfetto,用来取代 system trace 这些旧的性能分析工具,也可以用来分析 native 物理内存泄漏。更多细节请看官方文档,这里只写用来分析 native 泄漏的方法。
  20. 使用 Android profiler 分析 Android native 物理内存泄漏[14]:使用 Android Profiler 来分析物理内存泄漏
  21. Android S 图形显示系统系列文章
    1. Android 12(S) 图形显示系统 - 开篇[15]
    2. Android 12(S) 图形显示系统 - 基本概念(一)[16]
    3. Android 12(S) 图形显示系统 - 示例应用(二)[17]
    4. Android 12(S) 图形显示系统 - 应用建立和 SurfaceFlinger 的沟通桥梁(三)[18]
    5. Android 12(S) 图形显示系统 - SurfaceFlinger 的启动和消息队列处理机制(四)[19]
    6. Android 12(S) 图形显示系统 - createSurface 的流程(五)[20]
    7. Android 12(S) 图形显示系统 - BufferQueue/BLASTBufferQueue 之初识(六)[21]
    8. Android 12(S) 图形显示系统 - 几个常用类的介绍(七)[22]
  22. Android Native 消息队列处理系列文章
    1. Android Native -- Message/Handler/Looper 机制(原理篇)[23]
    2. Android Native -- Message/Handler/Looper 机制(应用篇)[24]
  23. Android S 原生系统内存泄露问题案例[25]:本文主要讲的是最近发现的系统级 shouldShowRequestPermissionRationale 方法使用导致的内存泄漏问题。

Part2经验分享 && 推荐阅读

过去一周个人阅读和收藏的非技术文章精选,扩展 Android 之外的知识和视野,不要给自己设限

  1. 084 创造自己的领域,乔布斯的人生规则,发声与退出,失眠的好处[26] :如何创造自己的市场、乔布斯的人生规则、发声与退出、规律睡眠不是目标、创业初期重要的事
  2. 播客 - EP.04 他为什么离开 google 成为独立开发者?他现在过得怎么样?[27]:本期是一期特别节目,将由我独自为大家讲述国外独立开发者 Michael Lynch 的故事。在本期里,我会讲述为何 Michael 要离开很多人梦寐以求的 google,而选择去成为一名独立开发者,以及他前两年的独立开发生涯。
  3. 推荐安全且匿名的邮箱 ProtonMail:我们推荐的 ProtonMail 邮箱,虽然我们不能保证上面几点达到 Gmail 的层级,但是整体来说,我们还是觉得挺靠谱的
  4. 如何在一次核打击中生存下来[28]:人类在核战争中是否能生存下来?目前还只有推测,有人说可以,有人说不行。要知道目前世界上现存的热核武器有几百枚,而其中最大的核武器比 1945 年投到广岛和长崎的威力要大几千倍。如果几千枚这样的炸弹同时爆炸,会发生什么我们还不清楚。对一些地区来说,特别是人口密集的中心城市,这可能是完全毁灭性的打击。[2] 如果在核打击中有人能生存下来,那一定是那些在精神和后勤保障上都做好了充分准备,居住在偏远和不具备战略重要性地区的人。
  5. 产品沉思录精选:如何像管理金融投资组合一样来管理知识?:只有阅读、思考和写作这三个部分结合在一起,才能给你的大脑带来真正的改变,使你成为一个更好的思考者。即使你不打算写关于某件事的书,把你读到的写下来也是很重要的。不过,如果你想正确地思考,你还是得动手记录。
  6. 从头梳理,看看中国的 ICP 备案制度[29]:对于生活在中国互联网环境中的开发者来说,ICP 备案(后称「备案」)是一个很难绕过去的话题,但凡你需要正经的建设一个网站,那么备案就是一个必须要做的事情,不然可能会出现各种奇奇怪怪的问题。但,你是否思考过,为什么我们需要备案?你是否了解过备案二字背后的深层含义?
  7. 你可能用得上的 13 款免费/开源中文字体:本文收集了一些免费/开源的中文字体,都是个人免费使用的,供大家参考。如需商用,还请去官网自行查看细则。
  8. 我掌握到了如何无障碍观看英文技术视频:大部分人的英语听力和阅读能力都没那么好。国外的优秀的科普视频,如果没有字幕,内容哪怕再好,也会让一部分听力不好的同学无法学习到。如果只有英文字幕,没有中文字幕,阅读能力不好的朋友也会望而生怯。庆幸的是,随着技术的发展,现在很多视频都提供了多国语言字幕。接下来我会陆续发布一些优质的成体系的计算机编程相关视频。
  9. 视频 - 泰勒·本-沙哈尔《正向领导力》[30]:泰勒讲师的积极心理学课程改变了我的一生,重新构建了我的思维模式,将这些原则应用到自己身上,真的提升了自己的幸福感,这个视频是泰勒讲师在讲授正向领导力的视频
  10. Why did I choose to be an Android developer, not an IOS developer ?[31]:讲了作者为什么选择 Android 作为自己的技术栈
  11. 许倬云 我跟大家共同努力的时间不会太长久了:历史学家许倬云已经 91 岁了。很多时候,他要和自己的身体作战。
  12. “资本主义外交” 的瓦解[32]:埃克森美孚、英国石油和壳牌正加紧剥离在俄罗斯的投资;苹果(Apple)、谷歌和 Facebook 都缩减了在俄罗斯提供的服务;迪士尼(Walt Disney)已经取消了在俄罗斯的电影发行和摇滚巡演;H&M 和耐克等服装品牌也效仿大众、丰田和梅赛德斯等汽车制造商,暂停了在俄罗斯的交货或运营。这次的跨国公司集体撤出俄罗斯标志着一个时代的结束。
  13. 为何 Crypto OG 和运动达人都用 STEPN?聊聊这款爆火的 Web3 生活方式应用[33]:STEPN 是一款融合了 GameFi 和 SocialFi 元素的 Web3 生活方式应用,通过「Move to Earn」模式吸引到了众多的加密圈内外用户。未来几个月内,团队还将发布更多功能,包括社交元素、NFT 成就系统、NFT 运动鞋租赁系统等。
  14. 最全!一图读懂 2022 年《政府工作报告》[34]:看看准没错

Part3开发 Weekly

  1. Android Weekly-508[35]
  2. Kotlin Weekly #292[36]
  3. onCreate Digest - Issue #98[37]
  4. NEWSLETTER #95[38]
  5. Graphics Programming weekly - Issue 224[39]
  6. 60 Hand-picked Programming Articles From Medium (February 2022)[40]
  7. 软件测试周刊(第 61 期):内心强大的人都有三个共性「不和他人作比较」「不对他人有期待」「不批判他人」

Part4书籍推荐

用 Python 编程 13 年后,我把经验写成了 400 页的书[41]

我一直觉得编程某种意义上是一门“手艺”,因为优雅而高效的代码,就如同完美的工艺品一样让人赏心悦目。就像一位用锤子敲敲打打了十几年的铁匠,总结出一套“如何锻造出锋利的刀”的经验之谈——我在代码世界也“敲敲打打”了十几年,沉淀下来的便是这本《Python 工匠》。

我将自己这些年掌握的技巧、经验与编程建议,去粗取精后悉数写入书中,希望它能帮读者朋友们完成从初学者到工匠的跃迁。

购买地址:https://item.jd.com/13068111.html

Part5定时打鸡血

今日份的鸡血来自:Tal Ben-Shahar: 正向领导力[42]

你最能影响「他者」的,不是说辞和 PPT,而是你正在工作的状态(being)。对于追随者来说,那是无法拒绝的。

Part6NewsLetter

由于微信外链限制,很多文章链接都无法直接访问,推荐大家订阅 NewsLetter 来获得更好的阅读体验,或者点击原文也可以跳转网页版

  1. NewLetter 订阅地址:https://androidweekly.zhubai.love/
  2. 本文 NewsLetter 地址:https://androidweekly.zhubai.love/posts/2112266837382262784
  3. 本文知乎地址:https://zhuanlan.zhihu.com/p/476766606

Part7知识星球:The Performance 内容分享

本周 The Performance 知识星球更新内容如下

进程 CPU 状态分析

  1. Perfetto/Systrace: 不同 CPU 运行状态异常原因 101 - Running 长 [43]
  2. Perfetto/Systrace: 不同 CPU 运行状态异常原因 102 - Runnable 长[44]
  3. Perfetto/Systrace: 不同 CPU 运行状态异常原因 103 - Sleep/Uninterruptible Sleep 长 [45]

参考资料

[1]

AMS 中关于内存回收的一些操作: https://juejin.cn/post/7070421678982955021

[2]

Working with WorkManager in Android: https://dharmeshbasapati.medium.com/working-with-workmanager-in-android-15cba41fb98

[3]

Foreground service launch restrictions-Android12: https://navczydev.medium.com/foreground-service-launch-restrictions-android12-ee00bf8a1674

[4]

Kotlin DSL 实战:像 Compose 一样写代码: https://juejin.cn/post/7069568821568208927

[5]

Use Android Studio like a pro — Best navigation shortcuts and tips: https://medium.com/wereprotein/use-android-studio-like-a-pro-best-navigation-shortcuts-and-tips-c22fc432825b

[6]

容易被忽视的几个 Kotlin 细节, value class 执行效率竟然这么高: https://juejin.cn/post/7069566917773623310

[7]

相比 Groovy 脚本, KTS 性能到底怎么样?: https://juejin.cn/post/7069550779454980104

[8]

Kotlin 中的协程、上下文和作用域: https://juejin.cn/post/7068901166456766472

[9]

Android 中关于枚举的优化: https://juejin.cn/post/7070074670036287496

[10]

谨慎 hook,一个 hook Transform 源码导致的错误!: https://juejin.cn/post/7070322767568044062

[11]

Android 源码分析 - Binder 驱动(中): https://juejin.cn/post/7069675794028560391

[12]

Android 源码分析 - Binder 驱动(上): https://juejin.cn/post/7059601252367204365

[13]

使用 perfetto 分析 Android native 物理内存泄漏: https://www.jianshu.com/p/f25539c80768

[14]

使用 Android profiler 分析 Android native 物理内存泄漏: https://www.jianshu.com/p/b609f34f77c4

[15]

Android 12(S) 图形显示系统 - 开篇: https://www.cnblogs.com/roger-yu/p/15641545.html

[16]

Android 12(S) 图形显示系统 - 基本概念(一): https://www.cnblogs.com/roger-yu/p/15702027.html

[17]

Android 12(S) 图形显示系统 - 示例应用(二): https://www.cnblogs.com/roger-yu/p/15707940.html

[18]

Android 12(S) 图形显示系统 - 应用建立和 SurfaceFlinger 的沟通桥梁(三): https://www.cnblogs.com/roger-yu/p/15714247.html

[19]

Android 12(S) 图形显示系统 - SurfaceFlinger 的启动和消息队列处理机制(四): https://www.cnblogs.com/roger-yu/p/15761646.html

[20]

Android 12(S) 图形显示系统 - createSurface 的流程(五): https://www.cnblogs.com/roger-yu/p/15768028.html

[21]

Android 12(S) 图形显示系统 - BufferQueue/BLASTBufferQueue 之初识(六): https://www.cnblogs.com/roger-yu/p/15773008.html

[22]

Android 12(S) 图形显示系统 - 几个常用类的介绍(七): https://www.cnblogs.com/roger-yu/p/15773010.html

[23]

Android Native -- Message/Handler/Looper 机制(原理篇): https://www.cnblogs.com/roger-yu/p/15099541.html

[24]

Android Native -- Message/Handler/Looper 机制(应用篇): https://www.cnblogs.com/roger-yu/p/15100416.html

[25]

Android S 原生系统内存泄露问题案例: https://www.jianshu.com/p/b0de542204f8

[26]

084 创造自己的领域,乔布斯的人生规则,发声与退出,失眠的好处: https://xiao.do/issues/084-1059071

[27]

播客 - EP.04 他为什么离开 google 成为独立开发者?他现在过得怎么样?: https://www.xiaoyuzhoufm.com/episode/5fcf60bedee9c1e16d9bc4c8?s=eyJ1IjoiNWYzMzVkN2FlMGY1ZTcyM2JiNWY2OTE1In0%3D

[28]

如何在一次核打击中生存下来: https://zh.wikihow.com/%E5%9C%A8%E4%B8%80%E6%AC%A1%E6%A0%B8%E6%89%93%E5%87%BB%E4%B8%AD%E7%94%9F%E5%AD%98%E4%B8%8B%E6%9D%A5

[29]

从头梳理,看看中国的 ICP 备案制度: https://sspai.com/post/71863?s=05

[30]

视频 - 泰勒·本-沙哈尔《正向领导力》: https://www.bilibili.com/video/BV1vW411Z7Qf

[31]

Why did I choose to be an Android developer, not an IOS developer ?: https://medium.com/@codecungtrung/why-did-i-choose-to-be-an-android-developer-not-an-ios-developer-eb67809fa704

[32]

“资本主义外交” 的瓦解: https://www.notion.so/534083412ac14377bfc6eb5ad6f64386

[33]

为何 Crypto OG 和运动达人都用 STEPN?聊聊这款爆火的 Web3 生活方式应用: https://www.theblockbeats.info/news/29607

[34]

最全!一图读懂 2022 年《政府工作报告》: http://www.gov.cn/xinwen/2022-03/05/content_5677186.htm

[35]

Android Weekly-508: https://androidweekly.net/issues/issue-508

[36]

Kotlin Weekly #292: https://mailchi.mp/kotlinweekly/kotlin-weekly-292

[37]

onCreate Digest - Issue #98: https://www.oncreatedigest.com/issues/oncreate-digest-issue-98-1055899

[38]

NEWSLETTER #95: https://dormoshe.io/newsletters/ag/android/95

[39]

Graphics Programming weekly - Issue 224: https://us16.campaign-archive.com/?e=3e7a3ba17e&u=c3c5ca4428be9ea8baed27659&id=7e8b08bf06

[40]

60 Hand-picked Programming Articles From Medium (February 2022): https://betterprogramming.pub/60-hand-picked-programming-articles-from-medium-february-2022-6496dac8910f

[41]

用 Python 编程 13 年后,我把经验写成了 400 页的书: https://www.zlovezl.cn/articles/my-book-releases/?s=09

[42]

Tal Ben-Shahar: 正向领导力: https://juicing.today/juice/20220302

[43]

Perfetto/Systrace: 不同 CPU 运行状态异常原因 101 - Running 长 : https://t.zsxq.com/ZjyFMBi

[44]

Perfetto/Systrace: 不同 CPU 运行状态异常原因 102 - Runnable 长: https://t.zsxq.com/3JaqZBi

[45]

Perfetto/Systrace: 不同 CPU 运行状态异常原因 103 - Sleep/Uninterruptible Sleep 长 : https://t.zsxq.com/qr3BaMF


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存